package data;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * @author Admin
 * @title: BaseDao
 * @projectName BMS
 * @description: BaseDao
 * @date 2024/12/15 11:55
 */
public class BaseDao {
    //定义需要加载的驱动
    protected static String dirver = "com.mysql.cj.jdbc.Driver";
    //定义数据库连接地址
    protected static String url = "jdbc:mysql://localhost:3306/tsgl?useUnicode=true&characterEncoding=utf-8";
    //定义数据库用户名
    protected static String dbUser = "root";
    //定义数据库密码
    protected static String dbPwd = "lyh199910";
    //定义数据库连接对象
    protected static Connection conn = null;

    /**
     * 构造方法 加载驱动器 创建与数据库连接
     */
    private BaseDao() {
        try{
            if(conn == null){
                //加载驱动
                Class.forName(dirver);
                //按照指定参数 创建与数据库连接
                conn = DriverManager.getConnection(url,dbUser,dbPwd);
                System.out.println("数据库连接成功" + conn);
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    /**
     * 成员方法1 创建执行对象 执行查询操作 返回结果集
     * @param sql
     * @return
     */
    public static ResultSet executeQuery(String sql){
        if(sql != null){
            if(conn == null){
                new BaseDao();
            }
            try{
                System.out.println("此时sql " + sql);
                //创建执行对象 执行查询操作 返回结果集
                return conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE)
                        .executeQuery(sql);
            }catch (SQLException e){
                System.out.println("查询失败");
                e.printStackTrace();
                return null;
            }
        }else {
            System.out.println("sql查询语句为空");
            return null;
        }
    }

    /**
     * 成员方法2 执行增删改操作
     * @param sql
     * @return
     */
    public static int executeUpdate(String sql){
        if(sql != null){
            if(conn == null){
                new BaseDao();
            }
            try{
                //创建执行对象 执行查询操作 返回结果集
                return conn.createStatement().executeUpdate(sql);
            }catch (SQLException e){
                System.out.println("更新失败");
                e.printStackTrace();
                return -1;
            }
        }else{
            System.out.println("sql更新语句为空");
            return -1;
        }
    }

    /**
     * 成员方法3 关闭数据库连接
     */
    public static void close(){
        if(conn != null){
            try{
                conn.close();
            }catch (SQLException e){
                e.printStackTrace();
                return;
            }
        }else{
            System.out.println("数据库连接为空");
            return;
        }
    }
}
